Uso de Depictor para visualizar grupos de ejes
Para este proyecto, también necesita el CODESYS Depictor complemento con una licencia válida.
La aplicación SoftMotion consta de cuatro accionamientos giratorios configurados como un grupo de ejes. Los primeros tres ejes mueven el TCP en el plano X / Y y el cuarto eje en el plano Z.
El ejemplo demuestra cómo se puede utilizar Depictor con la configuración cinemática Kin_Scara3_Z. También puede personalizar el mismo procedimiento para otras configuraciones cinemáticas.

Creando el proyecto estándar
Cree un proyecto estándar con el CODESYS SoftMotion Win controlador y el lenguaje de programación ST.
Agregue un administrador de biblioteca en el POU vista.
Abra el Administrador de bibliotecas y agregue las bibliotecas
SM3_Depictor
yDepictorBase
.
Añadiendo y parametrizando los ejes
Inserte cuatro ejes virtuales debajo del objeto Piscina SoftMotion General Axis y nombre los ejes como Drive1 ... Drive4.
Parametrizar los ejes Drive1, Drive2, Drive3 y Drive4 como tipo de eje finito con interruptores finales de software de -180 grados a 180 grados.
Editor de configuración:
Para más información, ver: unidad virtual
Configurar los grupos de ejes
Agregue un grupo de ejes "KinScara" debajo de la aplicación. Para hacer esto, haga clic en
.En el configurador, haga clic en Seleccionar cinemática. Selecciona el TRAFO.Kin_Scara3_Z cinemática.
Defina los parámetros de la siguiente manera:
dArmLength1, dArmLength2, dArmLength3: 500
dOffsetA1, dOffsetA2, dOffsetA3, dOffsetZ: 0
Ordene los ejes de la siguiente manera:
A1: Drive1
A2: Drive2
A3: Drive3
Z: Drive4
Nota: Puede arrastrar los ejes directamente al campo de entrada.
Para más información, ver: Cinemática
Creando el programa del controlador
En el
PLC_PRG
programa, declare instancias delMC_Power
bloque de funciones para todas las unidades. Crear unistate
variable para el diagrama de estado.VAR Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 : MC_Power; istate: INT; END_VAR
Defina un diagrama de estado en la implementación.
CASE istate OF 0: 1: 2: END_CASE
Activar todas las unidades en estado
0
.0: Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN istate:=istate+1; END_IF
Cuando los ejes están activados, habilite el grupo de ejes (cambie de "desactivado" a "standby").
VAR GroupEnable:MC_GroupEnable; END_VAR 1: GroupEnable(AxisGroup:=KinScara, Execute:=TRUE); IF GroupEnable.Done THEN istate:=istate+1; END_IF
Declare e inicialice una variable para guardar el valor establecido en coordenadas de máquina. Declare dos instancias de tipo
SMC_POS_REF
para representar el TCP en coordenadas cartesianas y de eje.VAR Frame: MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP Pos_Cart: SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates Pos_Axis: SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates END_VAR VAR CONSTANT axispos: TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60); END_VAR 2: Pos_Cart.c:= Frame; // To represent the TCP in cartesian coordinates;
Declare una instancia de
MC_MoveDirectAbsolute
para mover el robot SCARA a las coordenadas especificadas.VAR MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates END_VAR 2: MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined Axis coordinates //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates IF MoveAbs.Done THEN MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates istate:=2; END_IF
Declarar una variable de tipo
SMC_GroupReadSetPosition
para leer el valor actual del robot en coordenadas cartesianas y coordenadas de eje.VAR Car_pos, Axis_pos :SMC_GroupReadSetPosition; //to read the current axis values END_VAR 2: Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // to read the current position in cartesian coordinates Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // to read the current axis values
Todo el programa PLC_PRG
Compare su programa y agregue las partes del programa que faltan.
Declaración
PROGRAM PLC_PRG VAR Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 :MC_Power; istate: INT; GroupEnable:MC_GroupEnable; Frame:MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP Pos_Cart:SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates Pos_Axis:SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates (PTP) Car_pos,Axis_pos :SMC_GroupReadSetPosition; //to read the current position of the TCP in Cartesian and Axis Coordinates and display it on the visu scara_Config:trafo.Kin_Scara3_Z_Config; // To set the configuration of the SCARA_3_Z kin_Config:SMC_SetKinConfiguration; // To set the defined configuration of SCARA_3_Z to the axis group used nPeriod:DINT:=0; // SCARA_3_Z Period Xelbow:BOOL:=TRUE; END_VAR VAR CONSTANT axispos : TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60); END_VAR
Implementación
CASE istate OF 0: Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN istate:=istate+1; END_IF 1: GroupEnable(AxisGroup:=KinScara, Execute:=TRUE); IF GroupEnable.Done THEN istate:=istate+1; END_IF 2: scara_Config(xElbowRight:=Xelbow, nPeriodA3:=nPeriod); kin_Config(AxisGroup:=KinScara,ConfigData:=scara_Config.Config, Execute:=TRUE); Pos_Cart.c:=Frame; // To represent the TCP in cartesian coordinates Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // read the current position in cartesian coordinates Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // read the current position in Axis coordinates MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined axis coordinates //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates IF MoveAbs.Done THEN MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates istate:=2; END_IF END_CASE
Creación de un programa de representación
Agregue un nuevo POU "Representación" del tipo "Programa" debajo de la aplicación. Para hacer esto, haga clic en
.Declarar una variable de tipo
SM3_Depictor.SMC_R_Scara3_Z_Data
. Declarar una variableLrSize
de tipoLREAL
e inicializar la variable con el valor de 100.VAR ScaraTrafo : SM3_Depictor.SMC_R_Scara3_Z_Data; LrSize:LREAL:=100; END_VAR
Inserte una llamada al bloque de funciones en la implementación.
ScaraTrafo(AxisGroup:=KinScara, trf:=KinScara.trafo);
Agrega el POU "Representación" al Tarea principal.
Configuración de Depictor
Agrega un objeto "Representante" debajo de la aplicación. Para hacer esto, haga clic en
.Haz doble clic en el objeto.
Selecciona el Pose elemento en el árbol de Depictor.
Hacer clic
.los Caja El elemento se agrega debajo de la pose.
Selecciona el Representante Ref. opción en las propiedades del elemento.
Haga clic en el
botón.
Selecciona el SMC_R_Depictor_Scara3_Z objeto del
SM3_Depictor
Biblioteca.Defina las variables de la interfaz de la siguiente manera:
pensión completa: Representante.ScaraTrafo
lrZ_: Drive1.fSetPosition
lrZmin: 10
lrZmax: -50
lrSize: Depic.LrSize
xShowPlane: 0
Creando visualizaciones
Cree una pantalla de visualización en la que se puedan visualizar y modificar las coordenadas cartesianas y las coordenadas del eje.

Agregue un objeto "Visualización" debajo de la aplicación. Para hacer esto, haga clic en
.Abra la visualización en el editor.
Insertar un Rectángulo elemento de visualización (1).
Cambia las propiedades del elemento.
: %s
:PLC_PRG.Car_pos.Position.c.X
Tipo de entrada: VisuDialogs.Numpad
Usa otra variable:
PLC_PRG.Frame.X
Inserta el otro Caja elementos de visualización.
Cambie las propiedades de los elementos (2) y (3).
: %s
:PLC_PRG.Car_pos.Position.c.Y
oPLC_PRG.Car_pos.Position.c.Z
Tipo de entrada: VisuDialogs.Numpad
Usa otra variable:
PLC_PRG.Frame.Y
yPLC_PRG.Frame.Z
Cambie las propiedades de los elementos (4), (5) y (6).
: %s
:PLC_PRG.Frame.A
oPLC_PRG.Frame.B
oPLC_PRG.Frame.C
Cambie las propiedades de los elementos (7), (8), (9) y (10).
: %s
:PLC_PRG.Axis_pos.Position.a.a0
oPLC_PRG.Axis_pos.Position.a.a1
oPLC_PRG.Axis_pos.Position.a.a2
oPLC_PRG.Axis_pos.Position.a.a3
Tipo de entrada: VisuDialogs.Numpad
Usa otra variable:
PLC_PRG.Pos_Axis.a.a0
yPLC_PRG.Pos_Axis.a.a1
yPLC_PRG.Pos_Axis.a.a2
yPLC_PRG.Pos_Axis.a.a3
Etiquete los elementos de visualización con el Etiqueta elemento.
Iniciar y probar el programa
Puede modificar los valores de los ejes en la visualización del proyecto. Si comenta el comando de movimiento activo (MoveAbs...
, ...) en el programa PLC_PRG
y elimine los comentarios del segundo comando de movimiento, luego puede modificar las coordenadas cartesianas.
Construya el proyecto y descárguelo al PLC.
Abra el editor del objeto Depictor en su proyecto.
Cambie a la visualización y modifique los valores del eje o los valores cartesianos. Observe el movimiento del robot SCARA en Depictor.